package com.IC.base.config;

import IC.common.core.utils.uuid.UUID;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Base64;

@Slf4j
@Component
public class OssUtil2 {
    private static String endPoint = "oss-cn-shanghai.aliyuncs.com";
    private static String accessKeyId = "LTAI5tDbRqXkC5i3SMrCSDcX";
    private static String accessKeySecret = "XUzMZoHPLsjNLafHsdQnMElBWZATsu";
    private static String accessPre = "https://mall-bw.oss-cn-shanghai.aliyuncs.com/";
    private static String bucketName = "mall-bw";


    /**
     * 将 base64 编码的图片转换为 OSS URL
     * @param base64Img base64 编码的图片数据
     * @return 返回 OSS 上的图片 URL
     */
    /**
     * 将 base64 编码的图片转换为 OSS URL
     * @param base64Img base64 编码的图片数据
     * @return 返回 OSS 上的图片 URL
     */
    public String base64ToOssUrl(String base64Img) {
        // 解码 base64 字符串
        byte[] decodedBytes = Base64.getDecoder().decode(base64Img.split(",")[1]);
        // 生成文件名
        String fileName = UUID.randomUUID().toString() + ".png"; // 假设 base64 为 PNG 格式
        // 转换为输入流
        ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(decodedBytes);
        // 上传到 OSS 并返回 URL
        return upload(byteArrayInputStream, fileName);
    }

    /**
     * 上传文件到 OSS
     * @param inputStream 输入流
     * @param fileName 文件名
     * @return 访问路径
     */
    private String upload(InputStream inputStream, String fileName) {
        // 创建 OSS 客户端
        OSS ossClient = new OSSClientBuilder().build(endPoint, accessKeyId, accessKeySecret);
        try {
            // 上传文件到 OSS
            ossClient.putObject(bucketName, fileName, inputStream);
            // 构造访问路径
            String url = "https://" + bucketName + "." + endPoint + "/" + fileName;
            // 返回 URL
            return url;
        } finally {
            // 关闭 OSS 客户端
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
    /**
     * 将图片 URL 转换为 Base64 编码的字符串
     * @param imageUrl 图片的 URL 地址
     * @return 返回 Base64 编码的字符串
     */
    public static String imageUrlToBase64(String imageUrl) {
        try {
            // 从 URL 获取输入流
            InputStream inputStream = new URL(imageUrl).openStream();
            try {
                // 将输入流转换为字节数组
                ByteArrayOutputStream buffer = new ByteArrayOutputStream();
                int nRead;
                byte[] data = new byte[1024];
                while ((nRead = inputStream.read(data, 0, data.length)) != -1) {
                    buffer.write(data, 0, nRead);
                }
                buffer.flush();
                byte[] imageBytes = buffer.toByteArray();

                // 将字节数组编码为 Base64 字符串
                String base64Image = Base64.getEncoder().encodeToString(imageBytes);
                // 返回Base64编码的字符串，这里添加了标准的Base64图片数据前缀
                return "data:image/*;base64," + base64Image;
            } finally {
                inputStream.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }




    }
